Given the continually increased reliance on computers in contemporary society, computer technology has had to advance on many fronts to keep up with increased demand. One particular subject of significant research and development efforts is parallelism, i.e., the performance of multiple tasks in parallel.
A number of computer software and hardware technologies have been developed to facilitate increased parallel processing. From a software standpoint, multithreaded operating systems and kernels have been developed, which permit computer programs to concurrently execute in multiple “threads” so that multiple tasks can essentially be performed at the same time. Threads generally represent independent paths of execution for a program. For example, for an e-commerce computer application, different threads might be assigned to different customers so that each customer's specific e-commerce transaction is handled in a separate thread.
From a hardware standpoint, computers increasingly rely on multiple microprocessors to provide increased workload capacity. Furthermore, some microprocessors have been developed that support the ability to execute multiple threads in parallel, effectively providing many of the same performance gains attainable through the use of multiple microprocessors.
One logical extension of parallel processing is the concept of logical partitioning, where a single physical computer is permitted to operate essentially like multiple and independent “virtual” computers (referred to as logical partitions), with the various resources in the physical computer (e.g., processors, memory, input/output devices) allocated among the various logical partitions. Each logical partition executes a separate operating system, and from the perspective of users and of the software applications executing on the logical partition, operates as a fully independent computer.
With logical partitioning, a shared program, often referred to as a “hypervisor” or partition manager, manages the logical partitions and facilitates the allocation of resources to different logical partitions. For example, a partition manager may allocate resources such as processors, workstation adapters, storage devices, memory space, network adapters, etc. to various partitions to support the relatively independent operation of each logical partition in much the same manner as a separate physical computer.
In connection with managing logical partitions, configuration data typically must be maintained for each logical partition, as well as for any resources that are allocated to each logical partition. This configuration data is often required both during runtime, and during initialization of the computer upon startup. As a result, the configuration data typically must be persistently maintained in some form of persistent storage so that the information is protected from data loss in the event of a system failure.
Conventionally, configuration data for a logically-partitioned computer has been maintained in mass storage, e.g., on a disk drive or other magnetic media coupled to the computer. Mass storage typically has the benefit of relatively low cost per byte, which from the perspective of configuration data storage, effectively places no limitations on the amount of configuration data that may be maintained in mass storage. As a result, the amount of storage space occupied by the configuration data for a logically-partitioned computer has not been a significant concern for system designers.
In some circumstances, however, it may be desirable to store configuration data in another form of persistent memory. For example, a nonvolatile solid state memory such as flash memory has been found to be at least an order of magnitude faster than mass storage. Were such a memory used to store configuration data, it is believed that substantial performance gains could be realized over the use of mass storage in terms of storing and retrieving configuration data. Furthermore, access to flash memory may be handled at a much lower level in a computer than a mass storage device, as the latter of which typically requires the use of relatively higher levels of software to manage the transfer of data to and from the device. Particularly when configuration data is required at the earliest stages of the startup of a computer, accessing mass storage to retrieve such data may be significantly more complex and time consuming.
Despite the significant performance advantages of flash memory and other forms of nonvolatile solid state memories, to date the comparatively higher costs of such memory have made such memory cost prohibitive for many applications. The costs of such memory continues to fall, however, and as a result, nonvolatile solid state memories have become more economically feasible for some applications, including for storing configuration data. Given the economic constraints placed on system designers, however, a significant need has arisen for optimizing the manner in which configuration data is stored in a nonvolatile solid state memory so that the amount of nonvolatile solid state memory used in a particular system design can be minimized. Moreover, for configuration data utilized in connection with logical partitioning, the amount of configuration data required for a logical partition can vary based upon partition type, as well as based upon the addition or removal of resources to and from the logical partition. As a result, it can be difficult to predict how much configuration data will be required for a given customer installation.